//
//  main.m
//  NSValue
//
//  Created by wenjim on 17/10/25.
//  Copyright © 2017年 WenJim. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    
    /*
    typedef struct {
        int age;
        char * name;
        double _height;
    }Person;
    
    Person p = {30,"cwj",1.72};
    
    NSArray * arr = @[p];
    */
    
    // 1.利用NSValue包装常用的结构体
    
    CGPoint point = NSMakePoint(10, 20);
    NSValue * value = [NSValue valueWithPoint:point];
    NSArray * arr = @[value];
    NSLog(@"arr = %@",arr);
    
    
    // 2. 利用NSValue包装自定义的结构体
    typedef struct {
        int age;
        char * name;
        double height;
    }Person;
    
    Person p = {30,"cwj",1.72};
    // valueWithBytes:接受一个指针，需要传递需要包装的结构体的变量的地址
    // objType: 需要传递需要包装的数据类型
    NSValue * pValue = [NSValue valueWithBytes:&p objCType:@encode(Person)];
    
    NSArray * arr2 = @[pValue];
    NSLog(@"arr2 = %@",arr2);
    // 从NSValue 中取出自定义的结构体变量
    Person res;
    [pValue getValue:&res];
    NSLog(@"age = %i, name = %s, height = %.2f",res.age,res.name,res.height);
    
    
    return 0;
}
